\newpage
\section{Module Xbee}

\subsection{Premier essai - Clignotement de LED à distance}

Le but de notre premier essai était d'avoir deux modules Xbee, l'un donnant l'ordre de faire clignoter une LED branchée sur l'autre module.

Le module récepteur a donc une LED de branchée sur une pin déclarée en \texttt{OUTPUT}. Il effectue une attente active en lecture sur le port série. Dès qu'un entier est lu (1 dans notre cas) il allume la LED, sinon il l'éteint.\\

\begin{figure}[!h]
\centering
\shadowbox{
\begin{lstlisting}[breaklines=true, breakatwhitespace=true]
int incomingByte = 0;
int led = 8; //Declare la led branchee sur la pin 8

void setup(){
  Serial.begin(9600); // Demarre le port serie a une vitesse de 9600 bps.
  pinMode(led, OUTPUT);
}

void loop(){
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
  }     
  if(incomingByte == '0'){
    digitalWrite(led, LOW);
  } 
  else if (incomingByte == '1'){ 
    digitalWrite(led, HIGH);    
  }
}
\end{lstlisting}}
\includegraphics[scale=80]{xbee.png}
\caption{Code \& branchement du récepteur}\label{fig:somefiglabel}
\end{figure}



Le module émetteur écrit simplement des suites de 0 et de 1 (selon une fréquence choisie) sur le port série. Le shield Xbee se charge lui d'envoyer l'information sur les ondes.\\

\begin{figure}[!h]
\centering
\shadowbox{
\begin{lstlisting}
void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.print(1);
  delay(500);
  Serial.print(0);
  delay(1000);
}
\end{lstlisting}}
\caption{Code de l'émetteur}\label{fig:somefiglabel}
\end{figure}

\subsection{Problèmes rencontrés}

\subsubsection{Envoie du code sur la mainboard}

Nous avons eu beaucoup de problèmes pour réussir à envoyer du code sur la board lorsque le module Xbee était branché. En fait, nous nous sommes rendus compte qu'envoyer du code avec le module Xbee branché n'était pas possible, car le port série communiquait alors avec le chipset Xbee et non avec le chipset Arduino.

Ainsi, nous sommes obligés, à chaque envoie de code, de débrancher le module Xbee puis de le rebrancher une fois le code uploadé, et ce sur chaque mainboard. Cela est donc assez contraignant au niveau du temps et des manipulations à réaliser.

\subsubsection{Typage des données au sein du port série}

Le port série autorise le typage des données sur son flux d'écriture/lecture. Ainsi, il est possible d'écrire au format \texttt{byte} (format brut), \texttt{bin} (binaire), \texttt{oct} (octal), \texttt{hex} (hexadécimal), \texttt{dec} (décimal), ainsi que du flottant.

Exemples :
\begin{itemize}
\item Serial.print(78, BYTE) donne "N"
\item Serial.print(78, BIN) donne "1001110"
\item Serial.print(78, OCT) donne "116"
\item Serial.print(78, DEC) donne "78"
\item Serial.print(78, HEX) donne "4E"
\item Serial.println(1.23456, 0) donne "1"
\item Serial.println(1.23456, 2) donne "1.23"
\item Serial.println(1.23456, 4) donne "1.2346"\\
\end{itemize}

Il faut donc connaître du côté réception le format des données pour éviter leur corruption.

Par défaut, les entiers sont envoyés en utilisant un caractère ASCII pour chaque chiffre. Les flottants sont de même envoyés en chiffres ASCII, précision à deux décimales près. Les octets sont envoyés en un seul caractère. Enfin, les caractères et chaînes de caractères sont envoyés tels quels.
